-- 测试IO指令
-- 用于硬件交互和系统编程

-- 测试1: IN 指令 - 直接端口寻址
输入 累加器，0x60  -- IN AX, 60h (E5 60) - 从键盘端口读取
输入 累加器，0x21  -- IN AX, 21h (E5 21) - 从中断控制器读取

-- 测试2: IN 指令 - 间接端口寻址（使用DX）
移动 数据，0x03F8  -- MOV DX, 3F8h - 串口端口地址
输入 累加器，数据  -- IN AX, DX (ED) - 从串口读取

移动 数据，0x03FC  -- MOV DX, 3FCh
输入 累加器，数据  -- IN AX, DX (ED) - 从另一个端口读取

-- 测试3: OUT 指令 - 直接端口寻址
移动 累加器，0x00FF -- MOV AX, 0FFh
输出 0x60，累加器  -- OUT 60h, AX (E7 60) - 写入键盘端口

移动 累加器，0x00AA -- MOV AX, 0AAh
输出 0x21，累加器  -- OUT 21h, AX (E7 21) - 写入中断控制器

-- 测试4: OUT 指令 - 间接端口寻址（使用DX）
移动 数据，0x03F8  -- MOV DX, 3F8h - 串口端口地址
移动 累加器，65    -- MOV AX, 'A' (ASCII 65)
输出 数据，累加器   -- OUT DX, AX (EF) - 向串口写入字符

移动 数据，0x03FC  -- MOV DX, 3FCh
移动 累加器，0x0001 -- MOV AX, 1
输出 数据，累加器   -- OUT DX, AX (EF) - 向端口写入数据

-- 测试5: 串口通信示例
串口发送：
    移动 数据，0x03F8  -- 串口数据端口
    移动 累加器，72    -- 发送字符 'H' (ASCII 72)
    输出 数据，累加器   -- 输出到串口
    移动 累加器，105   -- 发送字符 'i' (ASCII 105)
    输出 数据，累加器   -- 输出到串口

串口接收：
    移动 数据，0x03F8  -- 串口数据端口
    输入 累加器，数据   -- 从串口读取
    -- AX 现在包含接收到的字符

-- 测试6: 键盘输入示例
键盘读取：
    输入 累加器，0x60  -- 从键盘端口读取扫描码
    -- AX 现在包含键盘扫描码

-- 测试7: 中断控制器配置示例
配置中断：
    移动 累加器，0x00FE -- 屏蔽所有中断，除了IRQ0
    输出 0x21，累加器   -- 写入主中断控制器
    移动 累加器，0x00FF -- 屏蔽所有从中断控制器中断
    输出 0xA1，累加器   -- 写入从中断控制器

串口发送：
串口接收：
键盘读取：
配置中断：
空操作

